﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UtilZ.Dotnet.Ex.ZLog;

namespace UtilZ.Dotnet.Ex.Communication.Net.Ftp
{
    /// <summary>
    /// 断开连接
    /// Disconnect.
    /// </summary>
    internal class FtpQUITCommand : FtpCommandAbs
    {
        /***********************************************************************************************************
        * [QUIT]（Logout,注销）命令
        * 说明：终止连接。
        * 
        * 用法：QUIT<CRLF>
        * 参数：无。
        * 例子：
        * SendData "QUTI" + “/r/n
        * 
        * 注释：QUIT将终止此USER，如果没有正在进行的文件传送，服务器将关闭控制连接。如果文件传送正在进行，该连接仍然打开直至结果呼响应，然后 服务器将其关闭。如果用户进程正在为几个USER传送文件，不想关闭后再逐个重新打开连接，那么应该使用REIN命令代替QUIT。
        * 控制连接的意外关闭会导致服导器采取有效的中止（ABORT）和注销（QUIT）操作。
        * 返回值如下（粗体表示成功）：
        * 221  服务正在关闭控制连接。
        * 500  语法错误，无法识别命令。
        * 
        ************************************************************************************************************/


        public FtpQUITCommand()
            : base()
        {

        }


        protected override string[] GetNames()
        {
            return new string[] { FtpCommands.QUIT, FtpCommands.BYE };
        }

        protected override IFtpResponse PrimitiveExcute(FtpSession session, string command, string commandLine)
        {
            session.OnRaiseSessionCloseCallback();
            return null;
        }
    }

}
